package com.zhen.concurrent.chapter09;

public class Singleton {

    private static int x = 0;//①

    private static int y;

    private static Singleton instance = new Singleton();//②

    public Singleton(){
        x++;
        y++;
    }

    private static Singleton getInstance(){
        return instance;
    }

    public static void main(String[] args) {

        /*此次执行结果，x = 1, y = 1：
           1.因为调用类的静态变量,即调用Singleton.x会导致类进行初始化
           2.在连接阶段，会先给静态变量分配内存并赋默认值，即x = 0, y = 0,instance = null
           3.在类初始化阶段，此时会给类的静态变量赋初始值，即按顺序x = 0,y = 0,instance = new Singleton(),执行到最后一步之后，由于
                在构造器内部执行了 x++，y++，所以执行完成后，x = 1,y = 1
           4.所以输出结果为 x = 1, y = 1

           扩展：把①和②调换位置，按照上述可知，在类初始化阶段，赋初始值的顺序为：instance = new Singleton()，x = 0，所以，在构造器内部执行了                      x++，y++，所以执行完成后，x = 1,y = 1,然后又给了x 复制为0，所以最终的执行结果就为 x = 0 , y = 1
         */
        System.out.println(Singleton.x);
        System.out.println(Singleton.y);
    }

}
